package tg.game.util.timeline;

/**
 * 固定间隔的任务
 *    每天执行的任务
 *    每小时执行的任务
 *    每分执行的任务
 *    
 *    每周执行的任务也是可以的，因为一周是七天，也是可以固定的
 *    每月的执行任务是不可以的，因为间隔时间是不固定的
 * @author NKW
 * 第一次执行时间之后，每次都加固定间隔后再执行
 */
public abstract class IntervalTask extends TimeTask {
	public static final int INTERVAL_SEC = 1000;//1秒的间隔
	public static final int INTERVAL_MIN = 60 * INTERVAL_SEC;//一分钟的间隔
	public static final int INTERVAL_HOUR = 60 * INTERVAL_MIN;//一小时的间隔
	public static final int INTERVAL_DAY = 24 * INTERVAL_HOUR;//一天的间隔
	private int interval = INTERVAL_SEC;//默认为秒的间隔
	/**
	 * 默认为false，就是固定间隔时间执行本次任务，不管本次任务的执行多长时间，在本次任务执行时间点再加上间隔之后马上执行下次任务，本次任务或许都有可能没有完成
	 * 如果为true时，就是本次任务执行完之后，再间隔指定时间之后才执行下次的任务,下次任务执行时，上次任务肯定 是完成了，而且间隔指定时间之后
	 */
	private boolean isTaskCompleteInterval = false;//是否任务结束 之后再  间隔，默认为假，如果是两个任务中间间隔要用true,如果是两个任务头间隔要用false
	public IntervalTask(int interval) {
		this.interval = interval;	
	}
	@Override
	protected long caculateNextExecTime() {
		if (isTaskCompleteInterval)//如果是任务结束之后的间隔，就用当前时间加上间隔时间
			return System.currentTimeMillis() + interval;
		else//否则就是两个任务头的间隔时间，就是上次的执行时间加上间隔时间就好
			return this.nextExecTime += interval;//叠加间隔时间
	}

	public boolean isTaskCompleteInterval() {
		return isTaskCompleteInterval;
	}
	public void setTaskCompleteInterval(boolean isTaskCompleteInterval) {
		this.isTaskCompleteInterval = isTaskCompleteInterval;
	}
	public int getInterval(){
		return this.interval;
	}
}
